#!/bin/bash
#ffing.cn
#检测并设置swap
#如果swap不存在，则创建,SETSWAP为指定的swap大小值

#read键盘输入固定值
read -p "输入swap固定值(单位G)：" GSETSWAP

#swap固定值,单位G
#GSETSWAP=8

################以下无需修改##################
echo "当前设置SWAP固定值为$GSETSWAP G"

#G转换为M
MSETSWAP=`echo "1024*$GSETSWAP"|bc`
#swap文件名
RANDOM=`date +%N`
SWAPFILE="/var/swapfile-$RANDOM"
#获取swap
OLDSWAP=`free -m|awk '/Swap/ {print $2}'`
OLDSWAPG=`free -h|awk '/Swap/ {print $2}'`

###判断swap
#判断是否存在swap分区
if [ "$OLDSWAP" = "0B" ] ;then
	#0B表示不存在swap，则创建swap
	echo  "正在创建swap，请等待 ……"
	dd  if=/dev/zero  of=$SWAPFILE  bs=1M  count=$MSETSWAP > /dev/null 2>&1
else

	#否则，扩容
	#判断当前设置swap是否大于原有swap
	if [ "$MSETSWAP" -gt "$OLDSWAP" ] ;then
	ADDSWAP=`echo "$MSETSWAP-$OLDSWAP"|bc`
	echo  "正在创建swap，请等待 ……"
	dd  if=/dev/zero  of=$SWAPFILE  bs=1M  count=$ADDSWAP > /dev/null 2>&1
	else
	echo "已存在SWAP: $OLDSWAPG"
	echo "错误！设置的swap需大于已有swap，请确认！"
	exit
	fi
fi

#格式化swap
mkswap  $SWAPFILE
#启动swap
swapon $SWAPFILE
#swap权限
chmod -R 0600 $SWAPFILE
#开机挂载swap
echo  "$SWAPFILE   swap  swap  defaults  0  0" >>  /etc/fstab
echo
echo "----------------------当前交换分区----------------------"
swapon -s
echo "----------------------当前内存信息----------------------"
free -h